package gold.digger;

import java.util.*;
import java.util.List;

/**
 * Created by fanzhenyu02 on 2020/6/27.
 * common problem solver template.
 */
public class LC682 {
    public long startExecuteTime = System.currentTimeMillis();


    class Solution {
        //                整数 x - 表示本回合新获得分数 x
//                "+" - 表示本回合新获得的得分是前两次得分的总和。题目数据保证记录此操作时前面总是存在两个有效的分数。
//                "D" - 表示本回合新获得的得分是前一次得分的两倍。题目数据保证记录此操作时前面总是存在一个有效的分数。
//                "C" - 表示前一次得分无效，将其从记录中移除。题目数据保证记录此操作时前面总是存在一个有效的分数。
        public int calPoints(String[] ops) {
            Stack<Integer> numStack = new Stack<>();
            for (String op : ops) {
                if ("+".equals(op)) {
                    int first = numStack.pop();
                    int cur = first + numStack.peek();
                    numStack.push(first);
                    numStack.push(cur);
                } else if ("D".equals(op)) {
                    numStack.push(numStack.peek() * 2);
                } else if ("C".equals(op)) {
                    numStack.pop();
                } else {
                    numStack.push(Integer.parseInt(op));
                }
            }

            int res = 0;
            while (!numStack.isEmpty()) res += numStack.pop();
            return res;
        }
    }

    public void run() {
        Solution solution = new Solution();
        List<Integer> list = new ArrayList<>();
        System.out.println(solution.toString());
    }

    public static void main(String[] args) throws Exception {
        LC682 an = new LC682();
        an.run();

        System.out.println("\ncurrent solution total execute time: " + (System.currentTimeMillis() - an.startExecuteTime) + " ms.");
    }
}
